home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
et
/
et3_0-a1.lha
/
et3
/
src
/
DialogView.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-07-08
|
3KB
|
153 lines
#ifdef __GNUG__
#pragma implementation
#endif
#include "DialogView.h"
#include "Class.h"
#include "OrdColl.h"
extern bool testwindow;
//---- DialogView --------------------------------------------------------------
NewAbstractMetaImpl(DialogView,View, (TP(dialogRoot)));
DialogView::DialogView(EvtHandler *eh) : View(eh, Point(3000))
{
dialogRoot= 0;
}
DialogView::~DialogView()
{
SafeDelete(dialogRoot);
}
void DialogView::ExtentChanged(VObject*)
{
Point oldextent(GetExtent());
CalcLayout(TRUE);
if (oldextent != GetExtent())
View::ExtentChanged(this);
}
VObject *DialogView::GetDialogRoot()
{
if (dialogRoot == 0)
SetDialog(DoCreateDialog(), FALSE);
return dialogRoot;
}
void DialogView::Open(bool mode)
{
View::Open(mode);
GetDialogRoot();
if (dialogRoot)
dialogRoot->Open(IsOpen());
}
VObject *DialogView::DoCreateDialog()
{
return 0;
}
Metric DialogView::GetMinSize()
{
Metric m;
if (testwindow) fprintf(stderr, "DialogView::GetMinSize\n");
GetDialogRoot();
if (dialogRoot) {
m= dialogRoot->GetMinSize();
SetFlag(eVObjHFixed, dialogRoot->TestFlag(eVObjHFixed));
SetFlag(eVObjVFixed, dialogRoot->TestFlag(eVObjVFixed));
}
return m;
}
VObject *DialogView::SetDialog(VObject *dia, bool redraw)
{
VObject *olddialog= 0;
if (dia) {
olddialog= dialogRoot;
dialogRoot= dia;
dialogRoot->SetContainer(this);
dialogRoot->Enable();
CalcLayout(redraw);
}
return olddialog;
}
void DialogView::CalcLayout(bool redraw)
{
if (dialogRoot) {
SetExtent(GetMinSize().Extent());
//SetOrigin(GetOrigin());
if (testwindow) fprintf(stderr, "DialogView::SetOrigin()\n");
View::SetOrigin(GetOrigin());
if (dialogRoot)
dialogRoot->SetOrigin(GetOrigin());
if (redraw)
ForceRedraw();
}
}
void DialogView::SetOrigin(Point at)
{
View::SetOrigin(at);
/*
if (dialogRoot)
dialogRoot->SetOrigin(at);
*/
}
void DialogView::SetExtent(Point e)
{
View::SetExtent(e);
if (testwindow) fprintf(stderr, "DialogView::SetExtent(%d,%d)\n", e.x, e.y);
if (dialogRoot)
dialogRoot->SetExtent(e);
}
VObject *DialogView::Detect(BoolFun find, void *arg)
{
VObject *v;
if (dialogRoot && (v= dialogRoot->Detect(find, arg)))
return v;
return VObject::Detect(find, arg);
}
Command *DialogView::DispatchEvents(Point lp, Token &t, Clipper *vf)
{
if (dialogRoot)
return dialogRoot->Input(lp, t, vf);
return View::DispatchEvents(lp, t, vf);
}
void DialogView::CollectParts(Collection *col)
{
View::CollectParts(col);
col->Add(dialogRoot);
}
void DialogView::EnableItem(int id, bool b)
{
VObject *vop;
if (vop= FindItem(id))
vop->Enable(b, TRUE);
}
VObject *DialogView::FindItem(int id)
{
if (dialogRoot)
return dialogRoot->FindItem(id);
return 0;
}
void DialogView::Draw(Rectangle r)
{
if (dialogRoot)
dialogRoot->DrawAll(r, FALSE);
}